/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * InterfaceRoot.java
 *
 * Created on 06/07/2010, 14:59:52
 */

package gui;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

import controller.BolaoFacade;
import controller.Sessao;


import bean.Grupo;
import bean.Rodada;
import dao.CarregaJogos;

/**
 * Interface Root
 * @author Claudio Cardoso, Daniel Leite, Lucas Sampaio, Matheus Sampaio
 * @version 1.0
 */
public class InterfaceRoot extends javax.swing.JFrame {
    /**
	 * 
	 */
	private static final long serialVersionUID = 855929406969087388L;
	BolaoFacade bolaoFacade = new BolaoFacade();

    /** Creates new form InterfaceRoot */
    public InterfaceRoot() {
        initComponents();
        setLocationRelativeTo(null);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        atualizaPontuacao = new javax.swing.JButton();
        removeJogador = new javax.swing.JButton();
        adicionaRodada = new javax.swing.JButton();
        removeRodada = new javax.swing.JButton();
        deslogar = new javax.swing.JButton();
        adicionaResultado = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Bolão da Copa P2 - Menu Root");

        atualizaPontuacao.setText("Atualiza Pontuação");
        atualizaPontuacao.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                atualizaPontuacaoActionPerformed(evt);
            }
        });

        removeJogador.setText("Remove Jogador");
        removeJogador.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeJogadorActionPerformed(evt);
            }
        });

        adicionaRodada.setText("Adiciona Rodada");
        adicionaRodada.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                adicionaRodadaActionPerformed(evt);
            }
        });

        removeRodada.setText("Remove Rodada");
        removeRodada.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeRodadaActionPerformed(evt);
            }
        });

        deslogar.setText("Deslogar");
        deslogar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                deslogarActionPerformed(evt);
            }
        });

        adicionaResultado.setText("Adiciona Resultado");
        adicionaResultado.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                adicionaResultadoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(atualizaPontuacao, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(adicionaResultado, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(adicionaRodada, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(39, 39, 39)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(removeJogador, javax.swing.GroupLayout.DEFAULT_SIZE, 176, Short.MAX_VALUE)
                            .addComponent(removeRodada, javax.swing.GroupLayout.DEFAULT_SIZE, 176, Short.MAX_VALUE))
                        .addGap(12, 12, 12))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(deslogar, javax.swing.GroupLayout.DEFAULT_SIZE, 178, Short.MAX_VALUE)
                        .addContainerGap())))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(26, 26, 26)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(atualizaPontuacao)
                    .addComponent(removeJogador))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(adicionaRodada)
                    .addComponent(removeRodada))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(adicionaResultado)
                    .addComponent(deslogar))
                .addContainerGap(30, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void atualizaPontuacaoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_atualizaPontuacaoActionPerformed
        bolaoFacade.atualizaPontuacao();
        JOptionPane.showMessageDialog(null, "Pontuação Atualizada");
        bolaoFacade.atualizaDados();
}//GEN-LAST:event_atualizaPontuacaoActionPerformed

    private void removeJogadorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeJogadorActionPerformed
        String emailJogador = JOptionPane.showInputDialog(null, "Digite o email do jogador a ser removido", "Remover Jogador");
        
        if (!(emailJogador.equalsIgnoreCase("root"))){

        	if (bolaoFacade.pesquisaJogador(emailJogador) != null) {
        		
        		Object[] options2 = {"Não", "Sim"};
				
				int resposta = JOptionPane.showOptionDialog(null,
						"Tem certeza que quer deletar o jogador " + bolaoFacade.pesquisaJogador(emailJogador).getNome() + " ?", "Bolão da Copa P2",
						JOptionPane.YES_NO_CANCEL_OPTION,
						JOptionPane.QUESTION_MESSAGE, null, options2, options2[0]);
        		
				if (resposta != 1)
        			return;
        		
        		for (Grupo grupo : bolaoFacade.pesquisaJogador(emailJogador).getGrupos()) {
        			grupo.removeJogador(bolaoFacade.pesquisaJogador(emailJogador));
        		}
        		
        		bolaoFacade.removeJogador(emailJogador);
                JOptionPane.showMessageDialog( this, "Jogador Removido com Sucesso");
            } else {
                JOptionPane.showMessageDialog( this, "Este Jogador não existe");
            }
        } else {
            JOptionPane.showMessageDialog( this, "Usuário root não pode ser removido");
        }
        
    }//GEN-LAST:event_removeJogadorActionPerformed

    private void adicionaRodadaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_adicionaRodadaActionPerformed
        try {
            JFileChooser fileChooser = new JFileChooser();
            fileChooser.setFileSelectionMode( JFileChooser.FILES_ONLY );

            int result = fileChooser.showOpenDialog( null );

            if (result == JFileChooser.CANCEL_OPTION)
                return;

            File fileName = fileChooser.getSelectedFile();

            if ( ( fileName == null ) || ( fileName.getName().equals( "" ) ) ) {
                JOptionPane.showMessageDialog( null, "Nome do arquivo invalido", "Nome do arquivo invalido", JOptionPane.ERROR_MESSAGE);
                return;
            }

            CarregaJogos.processaArquivoDeJogos( fileName, bolaoFacade, new Rodada());

            JOptionPane.showMessageDialog( null, "Rodada Adicionada");

        } catch (Exception e) {
            JOptionPane.showMessageDialog( null, "Arquivo Invalido");
        }
    }//GEN-LAST:event_adicionaRodadaActionPerformed

    private void removeRodadaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeRodadaActionPerformed
        List<String> rodadas = new ArrayList<String>();

        for (Rodada rodada : Sessao.getInstance().getBolao().getRodadas()) {
            rodadas.add("Rodada " + rodada.getIdentificador());
        }

        if (Sessao.getInstance().getBolao().getRodadas().size() == 0) {
            JOptionPane.showMessageDialog( null, "Não tem rodadas cadastradas");
            return;
        } else {
            String rodadaExcluir = (String) JOptionPane.showInputDialog(null, "Escolha a rodada que deseja remover", "Remove Rodada", JOptionPane.PLAIN_MESSAGE,
                    null, rodadas.toArray(), rodadas.toArray()[0]);

            if (rodadaExcluir == null)
                return;

            Object[] options2 = {"Não", "Sim"};

            int resposta = JOptionPane.showOptionDialog(null, "Tem certeza que deseja remover esta Rodada ?", "Bolão da Copa P2",
                    JOptionPane.YES_NO_CANCEL_OPTION,
                    JOptionPane.QUESTION_MESSAGE, null, options2, options2[0]);

            if (resposta == 0)
                return;
            if (resposta == 1){
            	
            	int identificador = Integer.parseInt(rodadaExcluir.split(" ")[1]);
            	
            	if (bolaoFacade.pesquisaRodada(identificador) == null) {
            		JOptionPane.showMessageDialog(this, "Rodada não encontrada");
            		return;
            	}
            	
            	
                bolaoFacade.removeRodada(bolaoFacade.pesquisaRodada(identificador));
                JOptionPane.showMessageDialog( null, "Rodada excluida com Sucesso");
                return;
            }

        }

    }//GEN-LAST:event_removeRodadaActionPerformed

    private void deslogarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deslogarActionPerformed
    	bolaoFacade.atualizaDados();
    	Sessao.getInstance().removeJogadorLogado();
        new InterfaceInicial().setVisible(true);
        dispose();
    }//GEN-LAST:event_deslogarActionPerformed

    private void adicionaResultadoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_adicionaResultadoActionPerformed
        List<String> rodadas = new ArrayList<String>();

        for (Rodada rodada : Sessao.getInstance().getBolao().getRodadas()) {
            rodadas.add("Rodada " + rodada.getIdentificador());
        }

        if (Sessao.getInstance().getBolao().getRodadas().size() <= 0) {
            JOptionPane.showMessageDialog(null, "Nenhuma Rodada Cadastrada.");
            return;
        } else {

            String rodadaAddResultado = (String) JOptionPane.showInputDialog(null, "Escolha a rodada para adicionar Resultados", "Adiciona Resultados", JOptionPane.PLAIN_MESSAGE,
                    null, rodadas.toArray(), rodadas.toArray()[0]);

            if (rodadaAddResultado == null)
                return;

            Object[] options2 = {"Não", "Sim"};

            int resposta = JOptionPane.showOptionDialog(null, "Tem certeza que deseja Adicionar Resultados nessa Rodada ?", "Bolão da Copa P2",
                    JOptionPane.YES_NO_CANCEL_OPTION,
                    JOptionPane.QUESTION_MESSAGE, null, options2, options2[0]);

            if (resposta == 0)
                return;
            if (resposta == 1){

                try {
                    JFileChooser fileChooser = new JFileChooser();
                    fileChooser.setFileSelectionMode( JFileChooser.FILES_ONLY );

                    int result = fileChooser.showOpenDialog( null );

                    if (result == JFileChooser.CANCEL_OPTION)
                        return;

                    File fileName = fileChooser.getSelectedFile();

                    if ( ( fileName == null ) || ( fileName.getName().equals( "" ) ) ) {
                        JOptionPane.showMessageDialog( null, "Nome do arquivo invalido", "Nome do arquivo invalido", JOptionPane.ERROR_MESSAGE);
                        return;
                    }
                    
                    int identificador = Integer.parseInt(rodadaAddResultado.split(" ")[1]);
                    CarregaJogos.lerResultados(fileName, bolaoFacade.pesquisaRodada(identificador));
                    
                    bolaoFacade.atualizaDados();

                    JOptionPane.showMessageDialog(null, "Resultados Adicionados");

                } catch (Exception e) {
                    JOptionPane.showMessageDialog(null, "Arquivo Inválido.");
                }
            }
        }
}//GEN-LAST:event_adicionaResultadoActionPerformed

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new InterfaceRoot().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton adicionaResultado;
    private javax.swing.JButton adicionaRodada;
    private javax.swing.JButton atualizaPontuacao;
    private javax.swing.JButton deslogar;
    private javax.swing.JButton removeJogador;
    private javax.swing.JButton removeRodada;
    // End of variables declaration//GEN-END:variables

}
